const cat = {
  namespaced: true,
  state() {
    return {
      list: [], // 用来存放当前购物车中有多少个商品
      counts: {},
    };
  },
  mutations: {
    // payload 参数接收的是 当前单个商品的所有信息， id ，价格，名字等
    addToList(state: any, payload: any) {
      // 从商品的信息中解构 id 出来
      const { id } = payload;

      // state.list 存放的是所有添加到购物车中的商品， 列表
      // 首先判断一下 当前的购物车列表中是否有 该商品
      // 如果存在该商品则不 在 state.list 中进行添加
      if (state.list.filter((item: any) => item.id === id).length === 0) {
        state.list.push(payload);
      }

      // 处理购物车商品数量
      if (!state.counts[id]) {
        state.counts[id] = 1;
      } else {
        state.counts[id] += 1;
      }
    },

    // payload == [id] 数组
    removeShop(state: any, payload: any) {
      // 过滤 和 选中的id数组匹配的 商品
      state.list =  state.list.filter((item: any) => !payload.includes(item.id));

      // 处理商品数量
      payload.forEach((id: string) => {
        state.counts[id] = 0;
      });
    },

    // payload  === { id, type: "add" }， / { id, type: "del" }
    setCount(state: any, payload: any) {
      const { id, type } = payload;

      // 处理商品数量
      if (type === "add") {
        state.counts[id] += 1;
      } else {
        state.counts[id] -= 1;
      }

      // 如果商品数量被减少到了 0 ，将 对应id 的商品从购物车中移除
      if (state.counts[id] === 0) {
        
        state.list = state.list.filter((item: any) => item.id !== id);
      }
    },
  },
};

export default cat;
